package org.example.me.handler;

import com.alibaba.excel.EasyExcel;
import lombok.extern.slf4j.Slf4j;
import org.example.me.enums.ExcelTypeEnum;
import org.example.me.dao.DataGenerator;
import org.example.me.handler.template.AbstractBaseExcelExportTemplate;
import org.example.me.handler.context.ExcelContext;
import org.example.me.model.User;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 用户数据Excel导出处理器
 * 负责将用户数据导出为Excel文件
 */
@Slf4j
@Component
public class UserExportHandler extends AbstractBaseExcelExportTemplate {

    /**
     * 获取处理器对应的Excel类型
     * @return Excel类型枚举值
     */
    @Override
    public ExcelTypeEnum getExcelType() {
        return ExcelTypeEnum.USER;
    }

    /**
     * 写入用户数据到Excel文件
     * @param excelContext Excel上下文信息
     */
    @Override
    protected void writeFile(ExcelContext excelContext) {
        // 初始化用户导出临时目录
        String tempDirectory = initUserTempDirectory(excelContext);

        // 生成文件路径
        String filePath = tempDirectory + "/" + getExcelType().getFileName() + ".xlsx";

        // 获取用户数据（实际应用中应该从数据库查询）
        List<User> userList = DataGenerator.generateUserData();

        // 使用EasyExcel写入数据到Excel文件
        try {
            EasyExcel.write(filePath, User.class).sheet("用户列表").doWrite(userList);
            log.info("用户数据导出成功，文件路径: {}", filePath);
        } catch (Exception e) {
            log.error("用户数据导出失败: {}", e.getMessage(), e);
            throw new RuntimeException("用户数据导出失败", e);
        }
    }
}